// 生成器
// 一类特殊的函数，可以一次或多次启动和停止，并不一定非得要完成
var x = 1;
function* foo() {
  x++;
  yield; // 暂停
  console.log("x:", x);
}
function bar() {
  x++;
}
var it = foo();
it.next();
console.log(x);
bar();
console.log(x);
it.next();
// 构造迭代器
// 第一个it.next()启动了生成器，并运行了*foo的第一行 x++
// *foo()在yield语句处暂停，在这里第一个it.next()调用结束。此时*foo()在运行且是活跃的，但处于暂停状态
// 调用bar()，递增x
// 最后it.next()调用从暂停处恢复了生成器*foo()的执行


// 规范和所有兼容浏览器都会默默丢弃传递给第一个 next() 的任何东西。
function* f(x) {
  var y = x * (yield "hello");
  return y;
}
var it = f(6);
var res = it.next();
console.log(res.value);
res = it.next(7);
console.log(res.value);
